package heip.generator.main;

import heip.generator.entity.EntityClazz;
import heip.generator.entity.EntityTable;
import heip.generator.generer.ActionGenerator;
import heip.generator.generer.EntityGenerator;
import heip.generator.generer.JSPGenerator;
import heip.generator.generer.ServiceGenerator;


/**
 * 两层表(父子表)的gird方式 代码生成器
 *1)修改模块moduleName
 *2）
 *a)生成表的实体对象
 * 注释main方法里里的gg.generatorClazzAndJSP(),启用gg.generatorTable()
 * 修改generatorTable 里的变量，参考方法说明
 *b)生成 service,action,jsp(必须先执行生成实体，并已经拷贝到依赖的开发工程里)
 * 注释main方法里里的gg.generatorTable(),启用gg.generatorClazzAndJSP()
 * 修改 generatorClazzAndJSP 里的变量，参考方法说明
 * 
 * @author HSWHM
 * Modify By:<br/>
 * Modify Date:2012-7-20<br/>
 * Remark:修改说明<br/>
 */
public class TwoTable4GridGenerator  extends BaseAbstractCodeGenerator{

	private String moduleName = "";//模块名称
	
	public static void main(String[] args)throws Exception{
		TwoTable4GridGenerator gg = new TwoTable4GridGenerator();
		
		//1.生成实体,请修改相关方法的变量
		//gg.generatorTable();
		
		//2 生成类和配置文件,请修改相关方法的变量
		//生成bs,action,jsp请保证实体已先生成并以导入依赖工程
		gg.generatorClazzAndJSP();
		
		open();
	}
	
	/**
	 * 使用说明
	 * 1)定义子表对象（可以多个）
	 * 例如： EntityTable sub = new EntityTable("PRD_DEV_TROUBLE_DTL(表名)", "TROUBLE_ID(表对应主表外键字段)");
	 *       EntityTable sub2 = new EntityTable("表明", "外键");
	 * 
	 * 2)定义主表Entity（只有一个）
	 * 例如 ：EntityTable mainTable = new EntityTable("PRD_DEV_TROUBLE（主表名称）",sub,sub2(前面定义的EntityTable子表对象));
	 * 
	 * 3)调用gt(主表EntityTable)生成文件
	 */
	public void generatorTable() throws Exception {
		/**
		 *定义 
		 */
		EntityTable sub = new EntityTable("PRD_DEV_TROUBLE_DTL", "TROUBLE_ID");
		EntityTable mainTable = new EntityTable("PRD_DEV_TROUBLE",sub);	
		
		
		/////////////////////////////////////生成代码
		gt(mainTable);//只需要传入主表对象就可以了
	}
	
	
	/**
	 * 使用说明
	 * 1)定义子表对象（可以多个）
	 * 例如： 
	 * EntityClazz sub = new EntityClazz(BmCodeName.class,"代码定义","codeType");//参数：子表类Class,实体中文名称，外键属性名
	 * EntityClazz sub2 = new EntityClazz(BmCodeName2.class,"代码定义2","codeType");
	 *
	 * 2)定义主表Entity（只有一个）
	 * 例如 ：
	 * EntityClazz mainClazz = new EntityClazz(BmCodeType.class, "代码类型",sub,sub2);//参数为：类class，中文名称，子表EntityClazz对象,...
	 * 
	 * 3)调用gt(主表EntityClazz)生成文件
	 */
	public void generatorClazzAndJSP()throws Exception{
		//EntityClazz subClazz = new EntityClazz(.class, "","codeType");
		//EntityClazz mainClazz = new EntityClazz(.class, "代码类型",subClazz);
		
		/////////////////////////////////////////////////////////////生成代码
		//gc(mainClazz);//只需要传入主表对象就可以了
	}
	
	
	
	
	
	//////////////////////////下面内容请勿修改/////////////////////////////////
	//////////////////////////下面内容请勿修改/////////////////////////////////
	//////////////////////////下面内容请勿修改/////////////////////////////////
	
	private void gt(EntityTable table) throws Exception{
		EntityGenerator eg = new EntityGenerator(moduleName);
		eg.generatorPO(new EntityTable[]{table}, null);
		eg.generatorVO(new EntityTable[]{table}, false);
		
		for(EntityTable et : table.getSubEntitys()){
			eg.generatorPO(new EntityTable[]{et}, null);
			eg.generatorVO(new EntityTable[]{et}, false);
		}
	}
	
	private void gc(EntityClazz clazz)throws Exception{
		ServiceGenerator sg = new ServiceGenerator(moduleName);
		sg.generatorGrid(clazz);
		ActionGenerator ag = new ActionGenerator(moduleName);
		ag.generatorGrid(clazz);
		JSPGenerator jg = new JSPGenerator(moduleName);
		jg.generatorGrid(clazz);
	}
}
